home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 21 / AACD 21.iso / AACD / Programming / amigatalk / general / List.st < prev    next >
Encoding:
Text File  |  2001-02-25  |  1.6 KB  |  70 lines

  1. Class List :Collection ! elements !
  2. [
  3.   with: firstElement   ! newList !
  4.     newList <- self new.
  5.  
  6.     newList add: firstElement.
  7.  
  8.     ^ newList
  9. |
  10.   add: anElement
  11.     elements <- Link value: anElement next: elements.
  12.     ^ anElement
  13. |
  14.   addLast: anElement
  15.     elements isNil 
  16.         ifTrue: [ self         add: anElement ]
  17.        ifFalse: [ elements addLast: anElement ].
  18.  
  19.     ^ anElement
  20. |
  21.   addAll: aCollection
  22.     aCollection do: [ :element | self addLast: element ]
  23. |
  24.   copy
  25.     ^ self asList
  26. |
  27.   first
  28.     ^ elements notNil 
  29.         ifTrue: [ elements value ]
  30.        ifFalse: [ self error: 'trying to remove from an empty list ']
  31. |
  32.   isEmpty
  33.     ^ elements isNil
  34. |
  35.   removeFirst
  36.     elements isNil 
  37.         ifTrue: [ self error: 'removing first element from empty list']
  38.        ifFalse: [ elements <- elements next ]
  39. |
  40.   remove: anElement
  41.     self remove: anElement
  42.        ifAbsent: [ self error: 'removing element not in collection' ]
  43. |
  44.   reverse | newList |
  45.     newList <- List new.
  46.  
  47.     self do: [ :element | newList add: element ].
  48.  
  49.     ^ newList
  50. |
  51.   remove: anElement ifAbsent: exceptionBlock
  52.     elements isNil
  53.         ifTrue: [ exceptionBlock value ]
  54.        ifFalse: [ elements remove: anElement ifAbsent: exceptionBlock ]
  55. |
  56.   do: aBlock
  57.     ^ elements notNil ifTrue: [ elements do: aBlock ]
  58. |
  59.   reverseDo: aBlock
  60.     ^ elements notNil ifTrue: [ elements reverseDo: aBlock ]
  61. |
  62.   select: testBlock | newList |
  63.     newList <- List new.
  64.  
  65.     self reverseDo: [:element | (testBlock value: element)
  66.                        ifTrue: [ newList add: element ] 
  67.                     ].
  68.     ^ newList
  69. ]
  70.